package cn.myframe.utils;

import java.lang.reflect.Field;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;

/**
 * 
 * 
 * @author ynz
 * @email ynz@myframe.cn
 * @date 2018年7月31日 下午7:31:50
 */
public class ReflectUtils {
	
	/**
	 * 通过@TableId注解获取对象主键的值
	 * @param obj
	 * @return
	 */
	public static Object getKeyValue(Object obj){
		Class<?> clz = obj.getClass();
		Object value = null;
		Field[] fields = clz.getDeclaredFields();  
		for(Field field : fields){  
			boolean fieldHasAnno = field.isAnnotationPresent(TableId.class);  
			 if(fieldHasAnno){ 
				 try {
					field.setAccessible(true); // 设置些属性是可以访问的
					value = field.get(obj);
				} catch (Exception e) {
					e.printStackTrace();
				} 
			 }
		}
		return value;
	}
	
	/**
	 * 比较对象
	 */
	public static void findDiff(Object target,Object oldTarget){
		Class<?> clz = target.getClass();
		Field[] fields = clz.getDeclaredFields(); 
		for(Field field : fields){ 
			boolean fieldHasAnno = field.isAnnotationPresent(TableField.class);  
			 if(fieldHasAnno){ 
				 try {
					field.setAccessible(true); // 设置些属性是可以访问的
					String targetValue = JSON.toJSONString(field.get(target));
					String oldTargetValue = JSON.toJSONString(field.get(oldTarget));
					if(!targetValue.equals(oldTargetValue)){
						System.out.println(oldTargetValue+"->"+targetValue);
					}
				} catch (Exception e) {
					e.printStackTrace();
				} 
			 }
		}
	}
	

}
